package com.atbeijing.bigdata.spark.core.rdd.persist

import org.apache.spark.{SparkConf, SparkContext}

object Spark03_RDD_Checkpoint {

    def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setMaster("local").setAppName("Persist")
        val sc = new SparkContext(conf)
        //设置检查点粗放文件夹, 最好将路径设定为HDFS
        sc.setCheckpointDir("check")

        val rdd = sc.makeRDD(
            List("Hello Scala")
        )
        val rdd1 = rdd.flatMap(_.split(" "))
        val rdd2 = rdd1.map(
            s => {
                println(s)
                (s, 1)
            })
        // 检查点操作，可以将临时计算结果长久地保存起来，应用程序执行完毕，也不会删除
        // 单独调用checkpoint时，会导致Job执行多次，所以一般和cache联用
        rdd2.cache
        rdd2.checkpoint()

        val rdd3 = rdd2.reduceByKey(_+_)
        rdd3.collect().foreach(println)
        sc.stop()
    }
}
